/*
菜品类别相关路由
*/

// 创建路由器 
const express=require('express');
//引入连接池
const pool=require('../../pool');
//定义路由器
const router=express.Router();
//抛出路由器
module.exports=router;

/*增*/ 
// Api: POST /admin/category/
// 请求参数JSON:{cname:'xxx'}
// 含义:根据传入的cname对菜品类别进行添加操作 并返回客户端添加成功的类目cid
// 添加成功返回值:{code:200,msg:'1 category add success!',cid:xxx} 
router.post('/',(req,res)=>{
    //获取到请求数据
    console.log('获取请求主体');
    console.log(req.body);
    //直接将整个JSON对象放入data
    let data=req.body
    //根据传入的JSON对象向服务器新增数据 问号会根据JSON字符串中有的 键值对进行自动添加属性
    pool.query('INSERT INTO xfn_category SET ?',data,(err,result)=>{
        if(err) throw err;
        res.send({code:200,msg:'1 category add success!'});
    })
})



/*删*/ 
// Api: DELETE /admin/category/:cid
// 含义:根据表示菜品编号的路由参数cid 删除对应菜品
// 删除成功返回值 {code:200,msg:'1 category delete success!' }
// 执行成功但删除失败 返回值 {code:400,msg:'0 category delete' }
 
router.delete('/:cid',(req,res)=>{
     //因为菜品类别和其他表有相关的外键约束牵引着 不能直接进行删除已经受牵引的菜品编号
        //再删除之前必须先把属于该类别菜品的菜别编号设置为NULL
        pool.query('UPDATE xfn_dish SET categoryId=NULL WHERE categoryId=?',req.params.cid,(err,result)=>{
            if(err) throw err;
            //至此指定类别的菜品已经修改完毕 可执行下列删除操作  举例:   如果要删除的编号是1 对应的是肉类绑定的商品 会全部先被修改为null 这样外键约束就不会出错-可以正常删除
            //? 替代符  req.params.cid 实际传入参数 实际删除操作
            pool.query('DELETE FROM xfn_category WHERE cid=?',req.params.cid,(err,result)=>{
                if(err) throw err;
                //获取DELETE 语句 实际影响的行数 必须大于0 才是删除成功
                if(result.affectedRows>0){
                    res.send({code:200,msg:'1 category deleted success!'})
                }else{
                    res.send({code:400,msg:'0 category delete'})
                }
            }) 
        })  
})


/*改*/
// Api: PUT /admin/category
// 请求参数JSON:{cid:xxx,cname:'xxx'}
// 含义:根据菜品类别编号cid修改该类别
// 修改成功返回值:{code:200,msg:'1 category updata success !}
// 需修改的类别不存在:{code:400,msg:'0 category updata not exists' }
// 修改的值并没有变化返回值:{code:401,msg:'0 No change }
router.put('/',(req,res)=>{
    //接受JSON对象
    let data = req.body; 
    //先验证一下用户传入的cname在服务器中是否存在 避免cname重复
    pool.query('SELECT * FROM xfn_category WHERE cname=?',data.cname,(err,result)=>{
        if(err) throw err;
        //如果通过cname查询 发现有数据就说明服务器已存在相同的名称 不能重复
        if(result.length>0){
            res.send('yi cun zai !!!')
            return
        }else{
            //如果没问题继续执行否则return 如果有很多值需要修改也可以直接SET ? 第一个参数直接写data
            pool.query('UPDATE xfn_category SET ? WHERE cid=?',[data,data.cid],(err,result)=>{
                if(err) throw err;
                //获取UPDATA 受改动的行必须大于0 才是修改成功
            if(result.changedRows>0){
                //正常改动成功！
                res.send({code:200,msg:'1 category updata success !'})
            }else if(result.affectedRows==0){
                //数据库中不存在要修改的CID
                res.send({code:400,msg:'0 category updata not exists' })
            }else if(result.affectedRows==1 &&result.changedRows==0){
                    //改动 但值无变化 
                res.send({code:401,msg:'0 No change'})
            }
            })  
        } 
    })
})

/*查*/
// Api: GET /admin/category
// 含义:客户端 获取 所有菜品类别,按菜品类别的编号升序排列
// 返回值 [{cid:1,cname:'...',...}{...}]
router.get('/',(req,res)=>{
    //查询语句
    pool.query('select * from xfn_category ORDER BY cid',(err,result)=>{
        //如果错误抛出
        if(err) throw err;
        //返回给客户端
        res.send(result);
    })
})

